Various tools and techniques have been used to analyze software. One popular method is to convert source code into an intermediate representation (“IR”) that can be analyzed by various tools to find errors in the program or analyze its structure and projected behavior. Because such an analysis does not involve executing the software, it is sometimes called “static analysis” of software.
Static analysis can be used for a variety of purposes, including data flow analyses, assertion checking, and the like. Typically, the source code is transformed into an intermediate representation before the analysis begins. The IR does not have source-specific conventions and facilitates various techniques used during static analysis.
However, there are times when the source code for software and the intermediate representation are unavailable; only a low level form is available. In such a case, it is not possible to obtain the intermediate representation. There thus exists a need to somehow provide for static analysis for lower levels of code, such as native software instructions.